package tinf.kanal;

import java.util.Random;

import tinf.ispis.IspisUDatoteku;

/**
 * Simulacija kanala sa smetnjama. Vjerojatnost pogreške = 1/20
 * 
 * @author Dado
 */
public class Kanal {

	private Random rand;
	private int brojac = 0;
	private boolean pogreske;

	/**
	 * Konstruktor novog kanala
	 * 
	 * @param pogreske
	 */
	public Kanal(boolean pogreske) {
		this.pogreske = pogreske;
		rand = new Random();
	}

	/**
	 * Primljenu poruku propušta kroz kanal te nad njenim bitovima generira
	 * pogreške sa zadanom vjerojatnošću (1/20)
	 * 
	 * @param ulazni
	 *            Poruka na ulazu u kanal
	 * @return Poruku na izlazu kanala
	 */
	public String propustiKrozKanal(String ulazni) {

		char[] buf = ulazni.toCharArray();

		if (pogreske) {
			for (int i = 0; i < buf.length; i++) {
				if (rand.nextInt(1000)<50) {
					brojac++;
					if (buf[i] == '1') {
						buf[i] = '0';
					} else {
						buf[i] = '1';
					}
				}
			}
		}

		IspisUDatoteku.upisiUDatoteku("Kanal");
		IspisUDatoteku.upisiUDatoteku("-----");
		IspisUDatoteku.upisiUDatoteku("Duljina binarnog niza: "
				+ ulazni.length());
		IspisUDatoteku.upisiUDatoteku("Broj gresaka: " + brojac);
		IspisUDatoteku
				.upisiUDatoteku("========================================================================================================================\n");

		return new String(buf);
	}
}
